// axios插件
import axios from 'axios';
// 可选是否插入
// store插件
import store from '@/store';
// router插件
import router from '@/router/index.js';
// 是否允许跨域时携带cookie信息[不允许]
axios.defaults.withCredentials = false;
// 设置token认证接口时,配置axios默认表头设置[默认打开页面时是没有token]
let token = '';
axios.defaults.headers.common['Authorization'] = token;
// axios实例中配置默认的访问服务器端口
let url = '';		// 如果项目打包时,此处为空
let instance = axios.create({
	baseURL : url
})
// 请求拦截器:在发送post/get请求之前,判断是否在本地中存储了token,如果有添加到headers内:后台会自己判断token是否过期
instance.interceptors.request.use( config=>{
	// 拦截成功的操作
	// 获取本地的token
	let token = localStorage.getItem('token');
	// console.log(token);
	// if( token ){
		config.headers.Authorization = "bearer " + token;
	// }
	// 返回配置
	return config;
} , error=>{
	// 拦截失败的操作
	return Promise.reject(error);
} )
// 响应拦截器:用于拦截后台的报错处理
instance.interceptors.response.use( response=>{
	// 响应成功
	return response;
} , err=>{
	// 响应失败
	// 判断接口返回的错误是否为真
	if( err.response ){
		// 判断状态码
		switch( err.response.status ){
			case 401 :
				console.log( '账号或密码错误' );
				// 登录失败,清除之前的token
				localStorage.setItem( 'token' , "" );
				// 返回登录页
				this.$router.push( '/home' );
				break;
			case 403:
				console.log( '非法闯入,禁止访问' );
				break;
			default :
				console.log( '请求错误!' );
				break;
		}
	}
	// 返回接口的信息提示
	return Promise.reject( err.response.data );
} )
// 导出axios实例
export default instance

// 请求方法的封装[不需要导出axios的实例]

// get请求封装:url参数:get请求的地址;params参数:请求时拼接到地址栏的参数
// export let $get = ( url , params )=>{
// 	return instance.get( url , {
// 		params : params,
// 	} )
// }

// post请求封装三种类型

// 1.post请求并提交json数据的函数
// url请求地址:data是提交的数据
// export let $postJson = ( url , data )=>{
// 	return instance.post( url , data , {
// 		headers : { 'Content-Type' : 'application/json' }
// 	} )
// }

// 2.post请求并上传文件
// url请求地址:firndata含有文件上传框的表单数据对象
// export let $postUpload = ( url , formdata )=>{
// 	return instance.post( url , fordata , {
// 		headers : { 'Content-Type' : 'multipart/form-data' }
// 	} )
// }

// 3.post请求:将提交的数据当作请求地址的参数进行提交
// url请求地址:data提交的数据
// export let $post = ( url , data )=>{
// 	let qsdata = qs.stringify( data );
// 	return instance.post( url , qsdata , {
// 		headers : { 'Content-Type' : 'application/x-www-form-urlencoded' }
// 	} )
// }